home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / TEMP / GNU / bison / Symbols < prev    next >
Text File  |  1995-06-28  |  4KB  |  79 lines

  1. Symbols
  2. Previous: <Grammar Outline=>GrammarOut> * Next: <Rules=>Rules> * Up: <Grammar File=>GrammarFil>
  3.  
  4. #Wrap on
  5. {fH3}Symbols, Terminal and Nonterminal{f}
  6.  
  7. {fUnderline}Symbols{f} in Bison grammars represent the grammatical classifications
  8. of the language.
  9.  
  10. A {fUnderline}terminal symbol{f} (also known as a {fUnderline}token type{f}) represents a
  11. class of syntactically equivalent tokens.  You use the symbol in grammar
  12. rules to mean that a token in that class is allowed.  The symbol is
  13. represented in the Bison parser by a numeric code, and the {fCode}yylex{f}
  14. function returns a token type code to indicate what kind of token has been
  15. read.  You don't need to know what the code value is; you can use the
  16. symbol to stand for it.
  17.  
  18. A {fUnderline}nonterminal symbol{f} stands for a class of syntactically equivalent
  19. groupings.  The symbol name is used in writing grammar rules.  By convention,
  20. it should be all lower case.
  21.  
  22. Symbol names can contain letters, digits (not at the beginning),
  23. underscores and periods.  Periods make sense only in nonterminals.
  24.  
  25. There are two ways of writing terminal symbols in the grammar:
  26.  
  27. #Indent +4
  28.  
  29.  • A {fUnderline}named token type{f} is written with an identifier, like an
  30. identifier in C.  By convention, it should be all upper case.  Each
  31. such name must be defined with a Bison declaration such as
  32. {fCode}%token{f}.  \*Note <Token Decl=>TokenDecl>: Token Type Names.
  33.  
  34.  
  35.  • A {fUnderline}character token type{f} (or {fUnderline}literal token{f}) is written in
  36. the grammar using the same syntax used in C for character constants;
  37. for example, {fCode}'+'{f} is a character token type.  A character token
  38. type doesn't need to be declared unless you need to specify its
  39. semantic value data type (\*Note <Value Type=>ValueType>: Data Types of Semantic Values), associativity, or
  40. precedence (\*Note <Precedence=>Precedencf>: Operator Precedence).
  41.  
  42. By convention, a character token type is used only to represent a
  43. token that consists of that particular character.  Thus, the token
  44. type {fCode}'+'{f} is used to represent the character {fEmphasis}+{f} as a
  45. token.  Nothing enforces this convention, but if you depart from it,
  46. your program will confuse other readers.
  47.  
  48. All the usual escape sequences used in character literals in C can be
  49. used in Bison as well, but you must not use the null character as a
  50. character literal because its ASCII code, zero, is the code
  51. {fCode}yylex{f} returns for end-of-input (\*Note <Calling Convention=>CallingCon>: Calling Convention for {fCode}yylex{f}).
  52.  
  53. #Indent
  54.  
  55. How you choose to write a terminal symbol has no effect on its
  56. grammatical meaning.  That depends only on where it appears in rules and
  57. on when the parser function returns that symbol.
  58.  
  59. The value returned by {fCode}yylex{f} is always one of the terminal symbols
  60. (or 0 for end-of-input).  Whichever way you write the token type in the
  61. grammar rules, you write it the same way in the definition of {fCode}yylex{f}.
  62. The numeric code for a character token type is simply the ASCII code for
  63. the character, so {fCode}yylex{f} can use the identical character constant to
  64. generate the requisite code.  Each named token type becomes a C macro in
  65. the parser file, so {fCode}yylex{f} can use the name to stand for the code.
  66. (This is why periods don't make sense in terminal symbols.)  
  67. \*Note <Calling Convention=>CallingCon>: Calling Convention for {fCode}yylex{f}.
  68.  
  69. If {fCode}yylex{f} is defined in a separate file, you need to arrange for the
  70. token-type macro definitions to be available there.  Use the {fEmphasis}-d{f}
  71. option when you run Bison, so that it will write these macro definitions
  72. into a separate header file {fCite}{fStrong}name{f}.tab.h{f} which you can include
  73. in the other source files that need it.  \*Note <Invocation=>Invocation>: Invoking Bison.
  74.  
  75. The symbol {fCode}error{f} is a terminal symbol reserved for error recovery
  76. (\*Note <Error Recovery=>ErrorRecov>); you shouldn't use it for any other purpose.
  77. In particular, {fCode}yylex{f} should never return this value.
  78.  
  79.